using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._DataManagement._Generalization
{
    /// <summary>
    /// <para>Import Generalization Data</para>
    /// <para>Imports data from a production schema to a themed generalization database using generalization rules defined in a Microsoft Excel spreadsheet.</para>
    /// <para>使用 Microsoft Excel 电子表格中定义的通用化规则将数据从生产架构导入主题通用化数据库。</para>
    /// </summary>    
    [DisplayName("Import Generalization Data")]
    public class ImportGeneralizationData : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ImportGeneralizationData()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_input_geodatabase">
        /// <para>Input Geodatabase</para>
        /// <para>The geodatabase containing data in a production schema.</para>
        /// <para>包含生产方案中数据的地理数据库。</para>
        /// </param>
        /// <param name="_target_geodatabase">
        /// <para>Target Geodatabase</para>
        /// <para>The target geodatabase where the data optimized for generalization will be loaded.</para>
        /// <para>将加载针对通用化而优化的数据的目标地理数据库。</para>
        /// </param>
        /// <param name="_rule_file">
        /// <para>Generalization Rule File</para>
        /// <para>The Excel file containing the generalization rules. This file defines features participating in the generalization process and determines the data that will be loaded and how it is organized. An example rule file is provided in the product file downloads for Defense Mapping and Production Mapping.</para>
        /// <para>包含概括规则的 Excel 文件。此文件定义参与泛化过程的特征，并确定将加载的数据及其组织方式。国防映射和生产映射的产品文件下载中提供了示例规则文件。</para>
        /// </param>
        /// <param name="_data_theme">
        /// <para>Data Theme</para>
        /// <para><xdoc>
        ///   <para>A theme that specifies the type of data to be generalized. Available themes are automatically populated from the Generalization Rule File parameter. The values provided in the example rule file are as follows:
        ///   <bulletList>
        ///     <bullet_item>TRANS—A data theme that groups features in a transportation network such as roads and railways.  </bullet_item><para/>
        ///     <bullet_item>STRUCTURE—A data theme that groups structural features such as buildings.  </bullet_item><para/>
        ///     <bullet_item>HYDRO—A data theme that groups water features such as lakes and rivers.  </bullet_item><para/>
        ///     <bullet_item>SOE—A skin of the earth data theme that groups polygon features that cover the entire surface of the earth with no holes or gaps. It can consist of water, vegetation, land, and artificial features.  </bullet_item><para/>
        ///     <bullet_item>GENERAL—A data theme that groups features other than those defined by another theme.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定要通用化的数据类型的主题。可用主题将从“概括规则文件”参数自动填充。示例规则文件中提供的值如下所示：
        ///   <bulletList>
        ///     <bullet_item>TRANS - 用于对公路和铁路等交通网络中的要素进行分组的数据主题。</bullet_item><para/>
        ///     <bullet_item>STRUCTURE - 对结构要素（如建筑物）进行分组的数据主题。</bullet_item><para/>
        ///     <bullet_item>HYDRO - 对湖泊和河流等水要素进行分组的数据主题。</bullet_item><para/>
        ///     <bullet_item>SOE - 地球皮肤数据主题，用于对覆盖整个地球表面且没有孔洞或间隙的面要素进行分组。它可以由水、植被、土地和人工特征组成。 </bullet_item><para/>
        ///     <bullet_item>GENERAL - 一个数据主题，用于对其他主题定义的功能以外的要素进行分组。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// </param>
        public ImportGeneralizationData(object _input_geodatabase, object _target_geodatabase, object _rule_file, object _data_theme)
        {
            this._input_geodatabase = _input_geodatabase;
            this._target_geodatabase = _target_geodatabase;
            this._rule_file = _rule_file;
            this._data_theme = _data_theme;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "Import Generalization Data";

        public override string CallName => "topographic.ImportGeneralizationData";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_input_geodatabase, _target_geodatabase, _rule_file, _data_theme, _updated_geodatabase];

        /// <summary>
        /// <para>Input Geodatabase</para>
        /// <para>The geodatabase containing data in a production schema.</para>
        /// <para>包含生产方案中数据的地理数据库。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_geodatabase { get; set; }


        /// <summary>
        /// <para>Target Geodatabase</para>
        /// <para>The target geodatabase where the data optimized for generalization will be loaded.</para>
        /// <para>将加载针对通用化而优化的数据的目标地理数据库。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_geodatabase { get; set; }


        /// <summary>
        /// <para>Generalization Rule File</para>
        /// <para>The Excel file containing the generalization rules. This file defines features participating in the generalization process and determines the data that will be loaded and how it is organized. An example rule file is provided in the product file downloads for Defense Mapping and Production Mapping.</para>
        /// <para>包含概括规则的 Excel 文件。此文件定义参与泛化过程的特征，并确定将加载的数据及其组织方式。国防映射和生产映射的产品文件下载中提供了示例规则文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Generalization Rule File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _rule_file { get; set; }


        /// <summary>
        /// <para>Data Theme</para>
        /// <para><xdoc>
        ///   <para>A theme that specifies the type of data to be generalized. Available themes are automatically populated from the Generalization Rule File parameter. The values provided in the example rule file are as follows:
        ///   <bulletList>
        ///     <bullet_item>TRANS—A data theme that groups features in a transportation network such as roads and railways.  </bullet_item><para/>
        ///     <bullet_item>STRUCTURE—A data theme that groups structural features such as buildings.  </bullet_item><para/>
        ///     <bullet_item>HYDRO—A data theme that groups water features such as lakes and rivers.  </bullet_item><para/>
        ///     <bullet_item>SOE—A skin of the earth data theme that groups polygon features that cover the entire surface of the earth with no holes or gaps. It can consist of water, vegetation, land, and artificial features.  </bullet_item><para/>
        ///     <bullet_item>GENERAL—A data theme that groups features other than those defined by another theme.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定要通用化的数据类型的主题。可用主题将从“概括规则文件”参数自动填充。示例规则文件中提供的值如下所示：
        ///   <bulletList>
        ///     <bullet_item>TRANS - 用于对公路和铁路等交通网络中的要素进行分组的数据主题。</bullet_item><para/>
        ///     <bullet_item>STRUCTURE - 对结构要素（如建筑物）进行分组的数据主题。</bullet_item><para/>
        ///     <bullet_item>HYDRO - 对湖泊和河流等水要素进行分组的数据主题。</bullet_item><para/>
        ///     <bullet_item>SOE - 地球皮肤数据主题，用于对覆盖整个地球表面且没有孔洞或间隙的面要素进行分组。它可以由水、植被、土地和人工特征组成。 </bullet_item><para/>
        ///     <bullet_item>GENERAL - 一个数据主题，用于对其他主题定义的功能以外的要素进行分组。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Data Theme")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _data_theme { get; set; }


        /// <summary>
        /// <para>Updated Geodatabase</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_geodatabase { get; set; }


        public ImportGeneralizationData SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}